﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Data;
using produccion.reportes;
using System.Windows.Controls.Primitives;
using System.Threading;
using System.Globalization;
using System.Collections;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FrmEntradaDeMateriaPrima.xaml
    /// </summary>
    public partial class FrmMaestroDeEquipos : Window
    {
        MDOgeneral MdoGeneral = new MDOgeneral();//FJRF - Traemos toda la informacion y funciones de MdoGeneral

        DataTable DtConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        DataTable DtConsultaEquipos;//FJRF - Usamos este DataTable para hacer consultas de los equipos
        DataTable DtConsultaEmpleadosPorEquipo;//FJRF - Usamos este DataTable para hacer consultas de los equipos por empleado
        DataSet DsConsulta;//FJRF - Usamos este DataSet para hacer consultas generales
        String StrConsulta;//FJRF - Usamos este DataTable para hacer consultas generales

        DataRow DrNuevosEquipos;//FJRF - Para la entrada de nuevos equipos
        DataRow DrNuevosEmpleados;//FJRF - Para la entrada de nuevos empleados
        
        String StrEquipoSeleccionadoUsuario;//FJRF - Para saber con que equipo se estra trabajando

        #region FJRF - Objetos del formulario
        public FrmMaestroDeEquipos()
        {
            InitializeComponent();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //FJRF - CON ESTO GARANTIZAMOS QUE LAS FECHAS SIEMPRE VENDRAN EN ESTE FORMATO DE DIA/MES/AÑO
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");//FJRF - Con esto aseguramos que la base de datos reciba los numeros como se deben recibir
            Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
            Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

            string strTituloVentana = "MAESTRO DE EQUIPOS" + " - Usuario:" + MDOgeneral.usuario + "- [FrmMaestroDeEquipos]";//FJRF - Armamos el titulo de la ventana
            Title = strTituloVentana;//FJRF - Ponemos el titulo de la ventana

            TxtAgregarEquipo.Style = null;//FJRF - Quitamos el estilo para manipular el foco

            #region FJRF - CargaInicialDeLosCombos
            //FJRF - CARGAMOS EL CODIGO DEL PROVEEDOR POR APARTE
            StrConsulta = "SELECT CODSEC_SEC, NOMSEC_SEC FROM MAESEC ORDER BY NOMSEC_SEC";//FJRF - Armamos la consulta
            CargarCombo(CboCodigoSeccion, StrConsulta, "CODSEC_SEC", "CODSEC_SEC");//FJRF - Cargamos el combo
            CargarCombo(CboNombreSeccion, StrConsulta, "CODSEC_SEC", "NOMSEC_SEC");//FJRF - Cargamos el combo

            StrConsulta = "SELECT CODEMP_EMP,  NOMEMP_EMP FROM MAEEMPP WHERE ESTADO_EMP = 'S' ORDER BY NOMEMP_EMP ";//FJRF - Armamos la consulta
            CargarCombo(CboCodigoEmpleado, StrConsulta, "CODEMP_EMP", "CODEMP_EMP");//FJRF - Cargamos el combo
            CargarCombo(CboNombreEmpleado, StrConsulta, "CODEMP_EMP", "NOMEMP_EMP");//FJRF - Cargamos el combo

            CboCodigoSeccion.Focus();//FJRF - Ponemos el foco en la seccion
            #endregion

        }
        private void CboCodigoSeccion_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.IsLoaded == true)//FJRF - Si el formulario esta cargado hacemos lo siguiente
            {
                CboNombreSeccion.SelectedIndex = CboCodigoSeccion.SelectedIndex;//FJRF - Igualamos lo que este seleccionado en el codigo con el nombre
                TxtAgregarEquipo.Text = "";//FJRF - Limpiamos los datos
                CboCodigoEmpleado.SelectedIndex = -1;//FJRF - Quitamos la seleccion del empleado
                PttV_BuscarEquipos(CboCodigoSeccion.SelectedValue.ToString());
                PttV_BuscarEmpleadosPorEquipo("", "");//FJRF - Limpiamos los datos
            }
        }
        private void CboNombreSeccion_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.IsLoaded == true)//FJRF - Si el formulario esta cargado hacemos lo siguiente
            {
                CboCodigoSeccion.SelectedIndex = CboNombreSeccion.SelectedIndex;//FJRF - Igualamos lo que este seleccionado en el nombre con el codigo
                TxtAgregarEquipo.Text = "";//FJRF - Limpiamos los datos
                CboCodigoEmpleado.SelectedIndex = -1;//FJRF - Quitamos la seleccion del empleado
                PttV_BuscarEquipos(CboCodigoSeccion.SelectedValue.ToString());
                PttV_BuscarEmpleadosPorEquipo("", "");//FJRF - Limpiamos los datos
            }
        }
        private void CboCodigoEmpleado_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.IsLoaded == true)//FJRF - Si el formulario esta cargado hacemos lo siguiente
            {
                CboNombreEmpleado.SelectedIndex = CboCodigoEmpleado.SelectedIndex;//FJRF - Igualamos lo que este seleccionado en el codigo con el nombre
            }
        }
        private void CboNombreEmpleado_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.IsLoaded == true)//FJRF - Si el formulario esta cargado hacemos lo siguiente
            {
                CboCodigoEmpleado.SelectedIndex = CboNombreEmpleado.SelectedIndex;//FJRF - Igualamos lo que este seleccionado en el nombre con el codigo
            }
        }
        private void DtgEquipos_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            #region FJRF - Saber Fila y Columna indexada

            int IntColumnaIndexada, IntFilaIndexada;
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            //Stepping through the visual tree
            while ((dep != null) && !(dep is System.Windows.Controls.DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            //Is the dep a cell or outside the bounds of Window1?
            if (dep == null | !(dep is System.Windows.Controls.DataGridCell))
            {
                return;
            }
            else
            {
                System.Windows.Controls.DataGridCell cell = new System.Windows.Controls.DataGridCell();
                cell = (System.Windows.Controls.DataGridCell)dep;
                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                if (dep == null)
                {
                    return;
                }
                int colindex = cell.Column.DisplayIndex;  //this returns COLUMN INDEX
                IntColumnaIndexada = colindex;

                DataGridRow row = dep as DataGridRow;
                System.Windows.Controls.DataGrid dataGrid = ItemsControl.ItemsControlFromItemContainer(row) as System.Windows.Controls.DataGrid;
                int rowindex = dataGrid.ItemContainerGenerator.IndexFromContainer(row); //this returns ROW INDEX

                IntFilaIndexada = rowindex;
            }
            #endregion

            String StrEquipoSeleccionado = "";//FJRF - Variables que se necesitan para enviarlos como parametros para buscar la imagen de la referencia

             if (DtConsultaEquipos == null)//FJRF - Si no hay datos hacemos lo siguiente
            {
                return;//FJRF - Nos salimos
            }
            else//FJRF - Si hay datos hacemos lo siguiente
            {
                StrEquipoSeleccionado = DtConsultaEquipos.Rows[IntFilaIndexada][0].ToString();
                StrEquipoSeleccionadoUsuario = StrEquipoSeleccionado;//FJRF - Asignamos el equipo seleccionado a una variable global del formulario

                PttV_BuscarEmpleadosPorEquipo(CboCodigoSeccion.SelectedValue.ToString(), StrEquipoSeleccionado);//FJRF - Buscamos los empleados en ese equipo seleccionado
            }
        }
        private void DtgEquipos_KeyUp(object sender, KeyEventArgs e)
        {
            #region FJRF - Saber Fila y Columna indexada

            int IntColumnaIndexada, IntFilaIndexada;
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            //Stepping through the visual tree
            while ((dep != null) && !(dep is System.Windows.Controls.DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            //Is the dep a cell or outside the bounds of Window1?
            if (dep == null | !(dep is System.Windows.Controls.DataGridCell))
            {
                return;
            }
            else
            {
                System.Windows.Controls.DataGridCell cell = new System.Windows.Controls.DataGridCell();
                cell = (System.Windows.Controls.DataGridCell)dep;
                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                if (dep == null)
                {
                    return;
                }
                int colindex = cell.Column.DisplayIndex;  //this returns COLUMN INDEX
                IntColumnaIndexada = colindex;

                DataGridRow row = dep as DataGridRow;
                System.Windows.Controls.DataGrid dataGrid = ItemsControl.ItemsControlFromItemContainer(row) as System.Windows.Controls.DataGrid;
                int rowindex = dataGrid.ItemContainerGenerator.IndexFromContainer(row); //this returns ROW INDEX

                IntFilaIndexada = rowindex;
            }
            #endregion

            String StrEquipoSeleccionado = "";//FJRF - Variables que se necesitan para enviarlos como parametros para buscar la imagen de la referencia
            StrEquipoSeleccionadoUsuario = StrEquipoSeleccionado;//FJRF - Asignamos el equipo seleccionado a una variable global del formulario

            if (DtConsultaEquipos == null)//FJRF - Si no hay datos hacemos lo siguiente
            {
                return;//FJRF - Nos salimos
            }
            else//FJRF - Si hay datos hacemos lo siguiente
            {
                StrEquipoSeleccionado = DtConsultaEquipos.Rows[IntFilaIndexada][0].ToString();
                StrEquipoSeleccionadoUsuario = StrEquipoSeleccionado;//FJRF - Asignamos el equipo seleccionado a una variable global del formulario

                PttV_BuscarEmpleadosPorEquipo(CboCodigoSeccion.SelectedValue.ToString(), StrEquipoSeleccionado);//FJRF - Buscamos los empleados en ese equipo seleccionado
            }
        }
        private void DtgEquipos_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
        }
        private void DtgEmpleados_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            string strNombreColumna = "";//FJRF - Variable para saber el nombre de la columna
            strNombreColumna = e.Column.Header.ToString();//FJRF - Extraemos el nombre de la columna

            if (strNombreColumna == "PORCENTAJE")//FJRF - Si alguna de las columnas tiene este nombre hacemos lo siguiente
            {
                Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
                MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

                (e.Column as DataGridTextColumn).Binding.StringFormat = "{0:##,#0.##}";//FJRF - Enviamos el formato a la celda
                (e.Column as DataGridTextColumn).CellStyle = MyStyleTextAlignmentProperty;//FJRF - Asignamos el estilo creado

                e.Column.IsReadOnly = false;//FJRF - habilitamos las columnas para que no se pueda escribir sobre ella
            }
            else//FJRF - Si no es la columna de porcentaje entonces hacemos lo siguiente
            {
                e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
            }
            
        }
        private void MenuEliminarEquipo_Click(object sender, RoutedEventArgs e)
        {
            String StrEquipoSeleccionado = "";//FJRF - Variables que se necesitan para enviarlos como parametros para buscar la imagen de la referencia
            StrEquipoSeleccionadoUsuario = StrEquipoSeleccionado;//FJRF - Asignamos el equipo seleccionado a una variable global del formulario

            if (DtgEquipos.SelectedItem == null)//FJRF - Si no hay datos hacemos lo siguiente
            {
                return;//FJRF - Nos salimos
            }
            else//FJRF - Si hay datos hacemos lo siguiente
            {
                DataRowView drDatos = DtgEquipos.SelectedItem as DataRowView;//FJRF - Creamos un DataRowView con el item seleccionado
                DataRow drDatoSeleccionado = drDatos.Row;//FJRF - Cargamos las filas que tenga

                StrEquipoSeleccionado = Convert.ToString(drDatoSeleccionado.ItemArray[0]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
                StrEquipoSeleccionadoUsuario = StrEquipoSeleccionado;//FJRF - Asignamos el equipo seleccionado a una variable global del formulario
            }

            #region FJRF - ArmamosLaPregunta
            String StrCaptionBox = "Confirmation";
            String StrMensajeBox = "¿Desea eliminar el equipo [ " + StrEquipoSeleccionado + " ] ?";
            MessageBoxButton buttons = MessageBoxButton.YesNo;
            MessageBoxImage icon = MessageBoxImage.Question;
            #endregion

            if (MessageBox.Show(StrMensajeBox, StrCaptionBox, buttons, icon) == MessageBoxResult.Yes)
            {
                try//FJRF - Controlamos el error
                {
                    Mouse.OverrideCursor = Cursors.Wait;//FJRF - Ponemos una esfera en timpo de espera

                    #region FJRF - Eliminamos el dato

                    StrConsulta = "SELECT * FROM MAEEQU WHERE CODSEC_EQU = '" + CboCodigoSeccion.SelectedValue.ToString() + "' AND CODEQU_EQU = '" + StrEquipoSeleccionado + "' ";//FJRF - Armamos la consulta
                    DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos

                    if (DtConsulta.Rows.Count > 0)//FJRF - Si el dato existe hacemos lo siguiente
                    {
                        StrConsulta = "DELETE FROM MAEEQU WHERE CODSEC_EQU = '" + CboCodigoSeccion.SelectedValue.ToString() + "' AND CODEQU_EQU = '" + StrEquipoSeleccionado + "' ";//FJRF - Armamos la consulta
                        MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta

                        #region FJRF - Actualizamos los datos al eliminar

                        PttV_BuscarEquipos(CboCodigoSeccion.SelectedValue.ToString());//FJRF - Actualizamos los equipos
                        PttV_BuscarEmpleadosPorEquipo(CboCodigoSeccion.SelectedValue.ToString(), StrEquipoSeleccionado);//FJRF - Buscamos los empleados en ese equipo seleccionado

                        CboCodigoEmpleado.SelectedIndex = -1;//FJRF - Quitamos la seleccion del empleado

                        TxtAgregarEquipo.Focus();//FJRF - Ponemos el foco en el equipo
                        #endregion
                    }
                    else//FJRF - Si el dato no existe entonces significa que es un dato digitado y no se ha guardado entonces solo lo que hacemos es actualizar los datos
                    {
                        #region FJRF - Actualizamos los datos porque es digitado

                        PttV_BuscarEquipos(CboCodigoSeccion.SelectedValue.ToString());//FJRF - Actualizamos los equipos
                        PttV_BuscarEmpleadosPorEquipo(CboCodigoSeccion.SelectedValue.ToString(), StrEquipoSeleccionado);//FJRF - Buscamos los empleados en ese equipo seleccionado

                        CboCodigoEmpleado.SelectedIndex = -1;//FJRF - Quitamos la seleccion del empleado

                        TxtAgregarEquipo.Focus();//FJRF - Ponemos el foco en el equipo
                        #endregion
                    }

                    #endregion

                    MessageBox.Show("Se elimino el equipo [ " + StrEquipoSeleccionado + " ] ", "PROCESO EXITOSO", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos un mensaje al usuario
                    StrEquipoSeleccionadoUsuario = "";//FJRF - limpiamos el equipo seleccionado a una variable global del formulario

                    Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
                }
                catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
                {
                    MessageBox.Show(ex.Message, "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                    Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
                }
            }
            else//FJRF - Si la respuesta es negativa
            {
                MessageBox.Show("No se elimino el equipo [ " + StrEquipoSeleccionado + " ] ", "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
            }
        }
        private void CboCodigoEmpleado_KeyDown(object sender, KeyEventArgs e)
        {
            if (CboCodigoEmpleado.SelectedIndex > -1)//FJRF - Si hay un empleado seleccionado hacemos lo siguiente
            {
                if (e.Key == Key.Enter)//FJRF - Si el usuario presiona enter hacemos lo siguiente
                {
                    BtnAgregarEmpleado.Focus();//FJRF - Enviamos el foco para q puedan agregar otro empleado
                }
            }
        }
        private void CboNombreEmpleado_KeyDown(object sender, KeyEventArgs e)
        {
            if (CboCodigoEmpleado.SelectedIndex > -1)//FJRF - Si hay un empleado seleccionado hacemos lo siguiente
            {
                if (e.Key == Key.Enter)//FJRF - Si el usuario presiona enter hacemos lo siguiente
                {
                    BtnAgregarEmpleado.Focus();//FJRF - Enviamos el foco para q puedan agregar otro empleado
                }
            }
        }

        private void TxtAgregarEquipo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)//FJRF - Si el usuario presiona enter entonces hacemos lo siguiente
            {
                BtnAgregarEquipo.Focus();//FJRF - Ponemos el foco en agregar equipo
            }
        }
        private void MenuEliminarEmpleado_Click(object sender, RoutedEventArgs e)
        {
            String StrEmpleadoSeleccionado = "", StrNombreEmpleado = "";//FJRF - Variables que se necesitan para enviarlos como parametros para buscar la imagen de la referencia
            Double DblPorcentajeEmpleado = 0;

            if (DtgEmpleados.SelectedItem == null)//FJRF - Si no hay datos hacemos lo siguiente
            {
                return;//FJRF - Nos salimos
            }
            else//FJRF - Si hay datos hacemos lo siguiente
            {
                DataRowView drDatos = DtgEmpleados.SelectedItem as DataRowView;//FJRF - Creamos un DataRowView con el item seleccionado
                DataRow drDatoSeleccionado = drDatos.Row;//FJRF - Cargamos las filas que tenga

                StrEmpleadoSeleccionado = Convert.ToString(drDatoSeleccionado.ItemArray[0]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
                StrNombreEmpleado = Convert.ToString(drDatoSeleccionado.ItemArray[1]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
                DblPorcentajeEmpleado = Double.Parse(drDatoSeleccionado.ItemArray[2].ToString());//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
            }
            if (DblPorcentajeEmpleado != 0)//FJRF - Si el porcentaje del empleado es diferente de cero hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO", "No se puede eliminar el empleado porque el porcentaje del empleado a eliminar debe estar en cero y tiene un porcentaje de [ " + DblPorcentajeEmpleado + "% ]", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
            }
            else//FJRF - Si el porcentaje del empleado es cero entonces hacemos lo siguiente
            {
                Decimal DblPorcentajeASumar = 0, DblTotalPorcentaje = 0;
                foreach (var FilaGrid in DtgEmpleados.Items)//FJRF - Recorremos el grid
                {
                    String StrPorcentaje = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 2);//FJRF - Extraemos el dato del grid en la fila recorrida

                    if (String.IsNullOrEmpty(StrPorcentaje) == true)//FJRF - Si el porcentaje viene vacio o nulo hacemos lo siguiente
                    {
                        StrPorcentaje = "0";//FJRF - Asignamos un cero por defecto
                    }
                    DblPorcentajeASumar = Decimal.Parse(StrPorcentaje.Trim().Replace(",", "."));//FJRF - Asignamos el valor remplazando la coma por el punto en caso de que tenga otra configuracion regional
                    DblTotalPorcentaje = DblTotalPorcentaje + DblPorcentajeASumar;//FJRF - Sumamos los valores encontrados
                }
                if (DblTotalPorcentaje != 100)//FJRF - Si el porcentaje es diferente de 100
                {
                    Msgbox("PROCESO CANCELADO", "No se elimino el empleado, porque el porcentaje debe ser del [ 100% ] entre todos los empleados del equipo, menos el del empleado que se va a eliminar que debe ser cero [0] y el porcentaje actual es de [ " + DblTotalPorcentaje + "% ] entre el resto de integrantes del equipo", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                }
                else//FJRF - Si el porcentaje es del 100% hacemos lo siguiente
                {
                    #region FJRF - ArmamosLaPregunta
                    String StrCaptionBox = "Confirmation";
                    String StrMensajeBox = "¿Desea eliminar el empleado [ " + StrEmpleadoSeleccionado + " ] - [ " + StrNombreEmpleado + " ] del equipo [ " + StrEquipoSeleccionadoUsuario + " ]?";
                    MessageBoxButton buttons = MessageBoxButton.YesNo;
                    MessageBoxImage icon = MessageBoxImage.Question;
                    #endregion

                    if (MessageBox.Show(StrMensajeBox, StrCaptionBox, buttons, icon) == MessageBoxResult.Yes)
                    {
                        try//FJRF - Controlamos el error
                        {
                            Mouse.OverrideCursor = Cursors.Wait;//FJRF - Ponemos una esfera en timpo de espera

                            #region FJRF - Primero guardamos los datos para que queden actualizados los nuevos valores que dan el 100%
                            String StrCodigoSeccion = CboCodigoSeccion.SelectedValue.ToString();//FJRF - Cargamos el codigo de la seccion
                            String StrCodigoEquipo = StrEquipoSeleccionadoUsuario;//FJRF - Cargamos el codigo del equipo

                            foreach (var FilaGrid in DtgEmpleados.Items)//FJRF - Recorremos el grid
                            {
                                String StrCodigoEmpleado = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 0);//FJRF - Extraemos el dato del grid en la fila recorrida
                                String StrPorcentaje = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 2);//FJRF - Extraemos el dato del grid en la fila recorrida
                                Double DblPorcentaje = 0;

                                if (String.IsNullOrEmpty(StrPorcentaje) == true)
                                {
                                    StrPorcentaje = "0";
                                }
                                DblPorcentaje = Double.Parse(StrPorcentaje.Trim().Replace(",", "."));

                                StrConsulta = "SELECT * FROM MAEEQU WHERE CODSEC_EQU = '" + StrCodigoSeccion + "' AND CODEQU_EQU = '" + StrCodigoEquipo + "' AND CODEMP_EQU = '" + StrCodigoEmpleado + "' ";//FJRF - Armamos la consulta
                                DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos

                                if (DtConsulta.Rows.Count > 0)//FJRF - Si el dato existe hacemos lo siguiente
                                {
                                    StrConsulta = "UPDATE MAEEQU SET PORCEN_EQU = " + DblPorcentaje + " WHERE CODSEC_EQU = '" + StrCodigoSeccion + "' AND CODEQU_EQU = '" + StrCodigoEquipo + "' AND CODEMP_EQU = '" + StrCodigoEmpleado + "' ";//FJRF - Armamos la consulta
                                    MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta
                                }
                                else//FJRF - Si el dato no existe hacemos lo siguiente
                                {
                                    StrConsulta = "INSERT INTO MAEEQU (CODSEC_EQU, CODEQU_EQU, CODEMP_EQU, PORCEN_EQU) VALUES ('" + StrCodigoSeccion + "', '" + StrCodigoEquipo + "', '" + StrCodigoEmpleado + "', " + DblPorcentaje + ") ";//FJRF - Armamos la consulta
                                    MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta
                                }
                            }
                            #endregion

                            #region FJRF - Eliminamos el dato

                            StrConsulta = "SELECT * FROM MAEEQU WHERE CODSEC_EQU = '" + CboCodigoSeccion.SelectedValue.ToString() + "' AND CODEQU_EQU = '" + StrEquipoSeleccionadoUsuario + "' AND CODEMP_EQU = '" + StrEmpleadoSeleccionado + "' ";//FJRF - Armamos la consulta
                            DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos

                            if (DtConsulta.Rows.Count > 0)//FJRF - Si el dato existe hacemos lo siguiente
                            {
                                StrConsulta = "DELETE FROM MAEEQU WHERE CODSEC_EQU = '" + CboCodigoSeccion.SelectedValue.ToString() + "' AND CODEQU_EQU = '" + StrEquipoSeleccionadoUsuario + "' AND CODEMP_EQU = '" + StrEmpleadoSeleccionado + "'  ";//FJRF - Armamos la consulta
                                MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta

                                #region FJRF - Actualizamos los datos al eliminar

                                PttV_BuscarEmpleadosPorEquipo(CboCodigoSeccion.SelectedValue.ToString(), StrEquipoSeleccionadoUsuario);//FJRF - Buscamos los empleados en ese equipo seleccionado
                                CboCodigoEmpleado.SelectedIndex = -1;//FJRF - Quitamos la seleccion del empleado

                                CboCodigoEmpleado.Focus();//FJRF - Ponemos el foco en el equipo
                                #endregion
                            }
                            else//FJRF - Si el dato no existe entonces significa que es un dato digitado y no se ha guardado entonces solo lo que hacemos es actualizar los datos
                            {
                                #region FJRF - Actualizamos los datos porque es digitado

                                PttV_BuscarEmpleadosPorEquipo(CboCodigoSeccion.SelectedValue.ToString(), StrEquipoSeleccionadoUsuario);//FJRF - Buscamos los empleados en ese equipo seleccionado

                                CboCodigoEmpleado.SelectedIndex = -1;//FJRF - Quitamos la seleccion del empleado

                                CboCodigoEmpleado.Focus();//FJRF - Ponemos el foco en el equipo
                                #endregion
                            }

                            #endregion

                            MessageBox.Show("Se elimino el empleado [ " + StrEmpleadoSeleccionado + " ] - [ " + StrNombreEmpleado + " ] del equipo [ " + StrEquipoSeleccionadoUsuario + " ] ", "PROCESO EXITOSO", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos un mensaje al usuario

                            Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
                        }
                        catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
                        {
                            MessageBox.Show(ex.Message, "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                            Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
                        }
                    }
                    else//FJRF - Si la respuesta es negativa
                    {
                        MessageBox.Show("No se elimino el empleado [ " + StrEmpleadoSeleccionado + " ] - [ " + StrNombreEmpleado + " ] del equipo [ " + StrEquipoSeleccionadoUsuario + " ] ", "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                        Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
                    }
                }
            }

        }
        private void BtnAgregarEquipo_Click(object sender, RoutedEventArgs e)
        {
            PttV_AgregarNuevoEquipo(TxtAgregarEquipo.Text.Trim().ToUpper());//FJRF - Agregamos el nuevo equipo
        }
        private void BtnAgregarEmpleado_Click(object sender, RoutedEventArgs e)
        {
            if (CboCodigoEmpleado.SelectedIndex == -1)//FJRF - Si no hay un empleado seleccionado hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO", "Debe haber un empleado seleccionado", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                CboCodigoEmpleado.Focus();//FJRF - Le enviamos el foco al objeto
            }
            else//FJRF - Si si hay un empleado seleccionado hacemos lo siguiente
            {
                PttV_AgregarNuevoEmpleado(CboCodigoEmpleado.SelectedValue.ToString(), CboNombreEmpleado.Text);//FJRF - Agregamos el nuevo empleado
            }
        }
        private void BtnGuardar_Click(object sender, RoutedEventArgs e)
        {
            PttV_Grabar(CboCodigoSeccion.SelectedValue.ToString(), StrEquipoSeleccionadoUsuario);//FJRF - Guardamos los datos
        }
        private void btnSalir_Click(object sender, RoutedEventArgs e)
        {
            this.Close();//FJRF - Nos salimos del formulario
        }
        #endregion

        #region FJRF - FUNCIONES Y PROCESOS DEL FORMULARIO
        protected void PttV_Grabar(String StrCodigoSeccion, String StrCodigoEquipo)
        {
            try 
            {
                Mouse.OverrideCursor = Cursors.Wait;//FJRF - Ponemos una esfera en timpo de espera

                Boolean BooPorcentajeIgualACero = false;
                foreach (var FilaGrid in DtgEmpleados.Items)//FJRF - Recorremos el grid
                {
                    String StrPorcentaje = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 2);//FJRF - Extraemos el dato del grid en la fila recorrida

                    if (String.IsNullOrEmpty(StrPorcentaje) == true)//FJRF - Si el porcentaje viene vacio o nulo hacemos lo siguiente
                    {
                        StrPorcentaje = "0";//FJRF - Asignamos un cero por defecto
                    }
                    Decimal DecValidar = Decimal.Parse(StrPorcentaje.Trim().Replace(",", "."));//FJRF - Cargamos el valor
                    if (DecValidar == 0)//FJRF - Si el valor es igual a cero hacemos lo siguiente
                    {
                        BooPorcentajeIgualACero = true;//FJRF - Informamos al sistema la incosistencia
                        break;//FJRF - Nos salimos
                    }
                }
                if (BooPorcentajeIgualACero == true)//FJRF - Si algun empleado tiene porcentaje cero hacemos lo siguiente
                {
                    Msgbox("PROCESO CANCELADO", "No se guardaron los datos, un empleado no puede tener porcentaje cero [ 0 ]", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                }
                else//FJRF - Si todos los empleados tiene un porcentaje hacemos lo siguiente
                {
                    Decimal DblPorcentajeASumar = 0, DblTotalPorcentaje = 0;
                    if (DtgEmpleados.Items.Count > 0)//FJRF - Si el grid tiene datos hacemos lo siguiente
                    {
                        foreach (var FilaGrid in DtgEmpleados.Items)//FJRF - Recorremos el grid
                        {
                            String StrPorcentaje = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 2);//FJRF - Extraemos el dato del grid en la fila recorrida

                            if (String.IsNullOrEmpty(StrPorcentaje) == true)//FJRF - Si el porcentaje viene vacio o nulo hacemos lo siguiente
                            {
                                StrPorcentaje = "0";//FJRF - Asignamos un cero por defecto
                            }
                            DblPorcentajeASumar = Decimal.Parse(StrPorcentaje.Trim().Replace(",", "."));//FJRF - Asignamos el valor remplazando la coma por el punto en caso de que tenga otra configuracion regional
                            DblTotalPorcentaje = DblTotalPorcentaje + DblPorcentajeASumar;//FJRF - Sumamos los valores encontrados
                        }
                        if (DblTotalPorcentaje != 100)//FJRF - Si el porcentaje es diferente de 100
                        {
                            Msgbox("PROCESO CANCELADO", "No se guardaron los datos porque el porcentaje debe ser del [ 100% ] entre todos los empleados del equipo y el porcentaje actual es de [ " + DblTotalPorcentaje + "% ]", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                        }
                        else//FJRF - Si el porcentaje es del 100% hacemos lo siguiente
                        {
                            foreach (var FilaGrid in DtgEmpleados.Items)//FJRF - Recorremos el grid
                            {
                                String StrCodigoEmpleado = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 0);//FJRF - Extraemos el dato del grid en la fila recorrida
                                String StrPorcentaje = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 2);//FJRF - Extraemos el dato del grid en la fila recorrida
                                Double DblPorcentaje = 0;

                                if (String.IsNullOrEmpty(StrPorcentaje) == true)
                                {
                                    StrPorcentaje = "0";
                                }
                                DblPorcentaje = Double.Parse(StrPorcentaje.Trim().Replace(",", "."));

                                StrConsulta = "SELECT * FROM MAEEQU WHERE CODSEC_EQU = '" + StrCodigoSeccion + "' AND CODEQU_EQU = '" + StrCodigoEquipo + "' AND CODEMP_EQU = '" + StrCodigoEmpleado + "' ";//FJRF - Armamos la consulta
                                DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos

                                if (DtConsulta.Rows.Count > 0)//FJRF - Si el dato existe hacemos lo siguiente
                                {
                                    StrConsulta = "UPDATE MAEEQU SET PORCEN_EQU = " + DblPorcentaje + " WHERE CODSEC_EQU = '" + StrCodigoSeccion + "' AND CODEQU_EQU = '" + StrCodigoEquipo + "' AND CODEMP_EQU = '" + StrCodigoEmpleado + "' ";//FJRF - Armamos la consulta
                                    MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta
                                }
                                else//FJRF - Si el dato no existe hacemos lo siguiente
                                {
                                    StrConsulta = "INSERT INTO MAEEQU (CODSEC_EQU, CODEQU_EQU, CODEMP_EQU, PORCEN_EQU) VALUES ('" + StrCodigoSeccion + "', '" + StrCodigoEquipo + "', '" + StrCodigoEmpleado + "', " + DblPorcentaje + ") ";//FJRF - Armamos la consulta
                                    MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta
                                }
                            }
                            MessageBox.Show("Información guardada con exito de la sección [ " + StrCodigoSeccion + "] en el equipo [ " + StrCodigoEquipo + " ]", "PROCESO EXITOSO", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos un mensaje al usuario
                        }
                    }
                }

                Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
            }
            catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
            {
                MessageBox.Show(ex.Message, "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
            }
            
        }
        protected void PttV_AgregarNuevoEmpleado(String StrNuevoEmpleado, String StrNombreEmpleado)
        {
            if (CboCodigoSeccion.SelectedIndex == -1)//FJRF - Si no hay una seccion seleccionada hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO", "Debe haber una sección seleccionada", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                CboCodigoSeccion.Focus();//FJRF - Le enviamos el foco al objeto
            }
            else//FJRF - Si hay una seccion seleccionada hacemos lo siguiente
            {
                if (String.IsNullOrEmpty(StrEquipoSeleccionadoUsuario) == true)//FJRF - Si no hay un equipo seleccionado hacemos lo siguiente
                {
                    Msgbox("PROCESO CANCELADO", "Debe haber un equipo seleccionado", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                    TxtAgregarEquipo.Focus();//FJRF - Le enviamos el foco al objeto
                }
                else//FJRF - Si hay un equipo seleccionado entonces hacemos lo siguiente
                {
                    if (String.IsNullOrEmpty(StrNuevoEmpleado) == true)//FJRF - Si no hay datos para ingresar un nuevo empleado entonces hacemos lo siguiente
                    {
                        Msgbox("PROCESO CANCELADO", "No hay datos para ingresar el nuevo empleado", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                        CboCodigoEmpleado.SelectedIndex = -1;//FJRF - limpiamos el objeto
                        CboCodigoEmpleado.Focus();//FJRF - Le enviamos el foco al objeto
                    }
                    else//FJRF - Si el texto tiene datos hacemos lo siguiente
                    {
                        Boolean BooDatoEncontrado = false;//FJRF - Asumimos que no hay datos repetidos
                        if (DtgEmpleados.Items.Count > 0)//FJRF - Si el grid tiene datos hacemos lo siguiente
                        {
                            foreach (var FilaGrid in DtgEmpleados.Items)//FJRF - Recorremos el grid
                            {
                                String StrDatoEnElGrid = ReturnDataGridCellText(DtgEmpleados, FilaGrid, 0);//FJRF - Extraemos el dato del grid en la fila recorrida
                                if (String.IsNullOrEmpty(StrDatoEnElGrid) == false)//FJRF - Si tiene datos hacemos lo siguiente
                                {
                                    if (StrNuevoEmpleado == StrDatoEnElGrid)//FJRF - Comparamos el dato nuevo con el dato en el grid si son iguales hacemos lo siguiente
                                    {
                                        BooDatoEncontrado = true;//FJRF - Informamos al sistema que el dato ya esta en el grid
                                    }
                                }
                            }
                        }
                        if (BooDatoEncontrado == true)//FJRF - Si encontramos un dato que ya existe hacemos lo siguiente
                        {
                            Msgbox("PROCESO CANCELADO", "Ya esta asignado el empleado [ " + StrNuevoEmpleado + " - " + StrNombreEmpleado + " ] ", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                            CboCodigoEmpleado.SelectedIndex = -1;//FJRF - limpiamos el objeto
                            CboCodigoEmpleado.Focus();//FJRF - Le enviamos el foco al objeto
                        }
                        else//FJRF - Si no hay datos repetidos hacemos lo siguiente
                        {
                            if (StrNuevoEmpleado.Trim().Length == 5)//FJRF - Si tiene la longitud correcta hacemos lo siguiente
                            {
                                DrNuevosEquipos = DtConsultaEmpleadosPorEquipo.NewRow();//FJRF - Convertimos los datos en filas

                                DrNuevosEquipos["CODIGO"] = StrNuevoEmpleado;//FJRF - Asignamos el equipo
                                DrNuevosEquipos["EMPLEADO"] = StrNombreEmpleado;//FJRF - Asignamos el equipo
                                DrNuevosEquipos["PORCENTAJE"] = 0;//FJRF - Asignamos el equipo

                                DtConsultaEmpleadosPorEquipo.Rows.Add(DrNuevosEquipos);//FJRF - Adicionamos una nueva fila con los datos ingresados

                                DtgEmpleados.ItemsSource = DtConsultaEmpleadosPorEquipo.DefaultView;//FJRF - Actualizamos el grid

                                TxtAgregarEquipo.Text = "";//FJRF - Limpiamos el equipo ya ingresado

                                //Msgbox("PROCESO EXITOSO", "El empleado [ " + StrNuevoEmpleado + " - " + StrNombreEmpleado + " ] fue ingresado con exito, recuerde que debe guardar para que los cambios se hagan permanentes", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos un mensaje al usuario
                                CboCodigoEmpleado.SelectedIndex = -1;//FJRF - limpiamos el objeto
                                CboCodigoEmpleado.Focus();//FJRF - Le enviamos el foco al objeto
                            }
                            else//FJRF - Si no tiene la longitud correcta hacemos lo siguiente
                            {
                                Msgbox("PROCESO CANCELADO", "El empleado debe e ser de 5 caracteres", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                                CboCodigoEmpleado.SelectedIndex = -1;//FJRF - limpiamos el objeto
                                CboCodigoEmpleado.Focus();//FJRF - Le enviamos el foco al objeto
                            }
                        }
                    }
                }
            }
        }
        protected void PttV_AgregarNuevoEquipo(String StrNuevoEquipo)
        {
            if (CboCodigoSeccion.SelectedIndex == -1)//FJRF - Si no hay una seccion seleccionada hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO", "Debe haber una sección seleccionada", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                CboCodigoSeccion.Focus();//FJRF - Le enviamos el foco al objeto
            }
            else//FJRF - Si hay una seccion seleccionada hacemos lo siguiente
            {
                if (String.IsNullOrEmpty(StrNuevoEquipo) == true)//FJRF - Si no hay datos para ingresar un nuevo equipo entonces hacemos lo siguiente
                {
                    Msgbox("PROCESO CANCELADO", "No datos digirados para ingresar el nuevo equipo", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                    TxtAgregarEquipo.Focus();//FJRF - Le enviamos el foco al objeto
                }
                else//FJRF - Si el texto tiene datos hacemos lo siguiente
                {
                    Boolean BooDatoEncontrado = false;//FJRF - Asumimos que no hay datos repetidos
                    if (DtgEquipos.Items.Count > 0)//FJRF - Si el grid tiene datos hacemos lo siguiente
                    {
                        foreach (var FilaGrid in DtgEquipos.Items)//FJRF - Recorremos el grid
                        {
                            String StrDatoEnElGrid = ReturnDataGridCellText(DtgEquipos, FilaGrid, 0);//FJRF - Extraemos el dato del grid en la fila recorrida
                            if (String.IsNullOrEmpty(StrDatoEnElGrid) == false)//FJRF - Si tiene datos hacemos lo siguiente
                            {
                                if (StrNuevoEquipo == StrDatoEnElGrid)//FJRF - Comparamos el dato nuevo con el dato en el grid si son iguales hacemos lo siguiente
                                {
                                    BooDatoEncontrado = true;//FJRF - Informamos al sistema que el dato ya esta en el grid
                                }
                            }
                        }
                    }
                    if (BooDatoEncontrado == true)//FJRF - Si encontramos un dato que ya existe hacemos lo siguiente
                    {
                        Msgbox("PROCESO CANCELADO", "Ya esta asignado el equipo [ " + StrNuevoEquipo + " ] ", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                        TxtAgregarEquipo.Focus();//FJRF - Le enviamos el foco al objeto
                    }
                    else//FJRF - Si no hay datos repetidos hacemos lo siguiente
                    {
                        if (StrNuevoEquipo.Trim().Length == 5)//FJRF - Si tiene la longitud correcta hacemos lo siguiente
                        {
                            DrNuevosEquipos = DtConsultaEquipos.NewRow();//FJRF - Convertimos los datos en filas

                            DrNuevosEquipos["EQUIPO"] = StrNuevoEquipo;//FJRF - Asignamos el equipo

                            DtConsultaEquipos.Rows.Add(DrNuevosEquipos);//FJRF - Adicionamos una nueva fila con los datos ingresados

                            DtgEquipos.ItemsSource = DtConsultaEquipos.DefaultView;//FJRF - Actualizamos el grid

                            TxtAgregarEquipo.Text = "";//FJRF - Limpiamos el equipo ya ingresado

                            //Msgbox("PROCESO EXITOSO", "El equipo [ " + StrNuevoEquipo + " ] fue ingresado con exito, recuerde que debe guardar para que los cambios se hagan permanentes", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos un mensaje al usuario
                            TxtAgregarEquipo.Focus();//FJRF - Le enviamos el foco al objeto
                        }
                        else//FJRF - Si no tiene la longitud correcta hacemos lo siguiente
                        {
                            Msgbox("PROCESO CANCELADO", "El equipo debe e ser de 5 caracteres", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                            TxtAgregarEquipo.Focus();//FJRF - Le enviamos el foco al objeto
                        }
                    }
                }
            }
        }
        protected void PttV_BuscarEquipos(String StrCodigoSeccion)
        {
            StrConsulta = "SELECT CODEQU_EQU AS EQUIPO ";//FJRF - Seleccionamos los campos con los que trabajaremos
            StrConsulta = StrConsulta + "FROM MAEEQU ";//FJRF - Seleccionamos la tabla
            StrConsulta = StrConsulta + "WHERE CODSEC_EQU = '" + StrCodigoSeccion + "' ";//FJRF - Condicionamos la busqueda
            StrConsulta = StrConsulta + "GROUP BY CODEQU_EQU ";//FJRF - Agrupamos los datos
            StrConsulta = StrConsulta + "ORDER BY CODEQU_EQU ";//FJRF - Ordenamos los campos

            DtConsultaEquipos = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos
            DtgEquipos.ItemsSource = DtConsultaEquipos.DefaultView;//FJRF - Asignamos los datos encontrados
        }
        protected void PttV_BuscarEmpleadosPorEquipo(String StrCodigoSeccion, String StrCodigoEquipo)
        {
            StrConsulta = "SELECT CODEMP_EQU AS CODIGO, NOMEMP_EMP AS EMPLEADO, PORCEN_EQU AS PORCENTAJE ";//FJRF - Seleccionamos los campos con los que trabajaremos
            StrConsulta = StrConsulta + "FROM MAEEQU, MAEEMPP ";//FJRF - Seleccionamos la tabla
            StrConsulta = StrConsulta + "WHERE CODEMP_EQU = CODEMP_EMP ";//FJRF - Condicionamos la busqueda
            StrConsulta = StrConsulta + "AND CODSEC_EQU = '" + StrCodigoSeccion + "' ";//FJRF - Condicionamos cuando la seccion sea esta
            StrConsulta = StrConsulta + "AND CODEQU_EQU = '" + StrCodigoEquipo + "' ";//FJRF - Condiciomanos cuando el equipo seleccionado sea este
            StrConsulta = StrConsulta + "ORDER BY NOMEMP_EMP ";//FJRF - Ordenamos por empleado

            DtConsultaEmpleadosPorEquipo = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos los datos
            DtgEmpleados.ItemsSource = DtConsultaEmpleadosPorEquipo.DefaultView;//FJRF - Asignamos los datos encontrados
        }

        #region FJRF - MsgboxPersonalizado
        protected void Msgbox(String StrCaption, String StrMensaje, MessageBoxButton MsbTipoBoton, MessageBoxImage MsbTipoImagenIcono)
        {
            MessageBoxButton buttons;
            buttons = MsbTipoBoton;

            MessageBoxImage icon = MsbTipoImagenIcono;
            MessageBox.Show(StrMensaje, StrCaption, buttons, icon);
        }
        #endregion

        #region FJRF - ParaObtenerLasPropiedadesDeLaCeldaDelGrid
        static class DataGridHelper
        {
            static public DataGridCell GetCell(DataGrid dg, int row, int column)
            {
                DataGridRow rowContainer = GetRow(dg, row);

                if (rowContainer != null)
                {
                    DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);

                    // try to get the cell but it may possibly be virtualized
                    DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
                    if (cell == null)
                    {
                        // now try to bring into view and retreive the cell
                        dg.ScrollIntoView(rowContainer, dg.Columns[column]);
                        cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
                    }
                    return cell;
                }
                return null;
            }

            static public DataGridRow GetRow(DataGrid dg, int index)
            {
                DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);
                if (row == null)
                {
                    // may be virtualized, bring into view and try again
                    dg.ScrollIntoView(dg.Items[index]);
                    row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);
                }
                return row;
            }

            static T GetVisualChild<T>(Visual parent) where T : Visual
            {
                T child = default(T);
                int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < numVisuals; i++)
                {
                    Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                    child = v as T;
                    if (child == null)
                    {
                        child = GetVisualChild<T>(v);
                    }
                    if (child != null)
                    {
                        break;
                    }
                }
                return child;
            }
        }
        #endregion

        #region FJRF - ParaAlinearALaDerecha
        public static Style newCellStyleAlinearDerecha()
        {
            System.Windows.Style style = new Style(typeof(DataGridCell));
            style.Setters.Add(new System.Windows.Setter
            {
                Property = Control.HorizontalAlignmentProperty,
                Value = HorizontalAlignment.Right
            });
            return style;
        }
        #endregion

        #region FJRF - ParaRetornarElValorDeUnaCeldaDeUnDataGrid
        private string ReturnDataGridCellText(DataGrid Dtg, object ObjItemFila, int IntColumna)
        {
            string strValorRetornado = "";//FJRF - Limpiamos el valor a retornar

            DataGridRow row = (DataGridRow)Dtg.ItemContainerGenerator.ContainerFromItem(ObjItemFila);//FJRF - Miramos cual es la fila a consultar

            if (row == null)
            {
                strValorRetornado = "";//FJRF - Retornamos el valor de la celda solo el texto
            }
            else
            {
                TextBlock cellContent = Dtg.Columns[IntColumna].GetCellContent(row) as TextBlock;//FJRF - Enviamos el dato de la fila y la columna para tener el dato de la celda

                if (cellContent == null)
                {
                    strValorRetornado = "";//FJRF - Retornamos el valor de la celda solo el texto
                }
                else
                {
                    strValorRetornado = cellContent.Text;//FJRF - Retornamos el valor de la celda solo el texto
                }
            }
            return strValorRetornado.Trim();//FJRF - Retornamos el valor sin espacion
        }
        #endregion

        #region FJRF - FuncionesEspecialesParaLasPropiedadesDeLaCeldaYElFoco

        public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is T)
                    return (T)child;
                else
                {
                    T childOfChild = FindVisualChild<T>(child);
                    if (childOfChild != null)
                        return childOfChild;
                }
            }
            return null;
        }
        public static DataGridCell GetCell(DataGrid dataGrid, DataGridRow rowContainer, int column)
        {
            if (rowContainer != null)
            {
                DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
                if (presenter == null)
                {
                    /* if the row has been virtualized away, call its ApplyTemplate() method 
                     * to build its visual tree in order for the DataGridCellsPresenter
                     * and the DataGridCells to be created */
                    rowContainer.ApplyTemplate();
                    presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
                }
                if (presenter != null)
                {
                    DataGridCell cell = presenter.ItemContainerGenerator.ContainerFromIndex(column) as DataGridCell;
                    if (cell == null)
                    {
                        /* bring the column into view
                         * in case it has been virtualized away */
                        dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[column]);
                        cell = presenter.ItemContainerGenerator.ContainerFromIndex(column) as DataGridCell;
                    }
                    return cell;
                }
            }
            return null;
        }
        public static void SelectRowByIndexes(DataGrid dataGrid, params int[] rowIndexes)
        {
            if (!dataGrid.SelectionUnit.Equals(DataGridSelectionUnit.FullRow))
                throw new ArgumentException("The SelectionUnit of the DataGrid must be set to FullRow.");

            if (!dataGrid.SelectionMode.Equals(DataGridSelectionMode.Extended))
                throw new ArgumentException("The SelectionMode of the DataGrid must be set to Extended.");

            if (rowIndexes.Length.Equals(0) || rowIndexes.Length > dataGrid.Items.Count)
                throw new ArgumentException("Invalid number of indexes.");

            dataGrid.SelectedItems.Clear();
            foreach (int rowIndex in rowIndexes)
            {
                if (rowIndex < 0 || rowIndex > (dataGrid.Items.Count - 1))
                    throw new ArgumentException(string.Format("{0} is an invalid row index.", rowIndex));

                object item = dataGrid.Items[rowIndex]; //=Product X
                dataGrid.SelectedItems.Add(item);

                DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
                if (row == null)
                {
                    dataGrid.ScrollIntoView(item);
                    row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
                }
                if (row != null)
                {
                    DataGridCell cell = GetCell(dataGrid, row, 0);
                    if (cell != null)
                        cell.Focus();
                }
            }
        }
        public static void SelectCellByIndex(DataGrid dataGrid, int rowIndex, int columnIndex)
        {
            if (!dataGrid.SelectionUnit.Equals(DataGridSelectionUnit.Cell))
                throw new ArgumentException("The SelectionUnit of the DataGrid must be set to Cell.");

            if (rowIndex < 0 || rowIndex > (dataGrid.Items.Count - 1))
                throw new ArgumentException(string.Format("{0} is an invalid row index.", rowIndex));

            if (columnIndex < 0 || columnIndex > (dataGrid.Columns.Count - 1))
                throw new ArgumentException(string.Format("{0} is an invalid column index.", columnIndex));

            dataGrid.SelectedCells.Clear();

            object item = dataGrid.Items[rowIndex]; //=Product X
            DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
            if (row == null)
            {
                dataGrid.ScrollIntoView(item);
                row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
            }
            if (row != null)
            {
                DataGridCell cell = GetCell(dataGrid, row, columnIndex);
                if (cell != null)
                {
                    DataGridCellInfo dataGridCellInfo = new DataGridCellInfo(cell);
                    dataGrid.SelectedCells.Add(dataGridCellInfo);

                    cell.Focus();
                }
            }
        }
        #endregion

        #region FJRF - CargarCombo
        private Boolean CargarCombo(ComboBox CboComboACargar, string strConsultaOracle, string strSelectedValuePath, string strDisplayMemberPath)
        {
            Boolean BooSiHayDatos = false;//FJRF - Variable para informar si hay datos o no
            CboComboACargar.ItemsSource = null;
            CboComboACargar.Items.Clear();//FJRF - Borramos los posibles datos que pueda tener el combo

            DtConsulta = new DataTable();//FJRF - Inicializamos la variable
            DsConsulta = new DataSet();//FJRF - Inicializamos la variable

            DtConsulta = MdoGeneral.consulta(strConsultaOracle);//FJRF - Realizamos la consulta y retornamos los datos

            if (DtConsulta.Rows.Count > 0)//FJRF - Si hay datos llenar el combo
            {
                BooSiHayDatos = true;//FJRF - Informamos que hay datos

                DsConsulta.Tables.Add(DtConsulta);//FJRF - Adicionameos el datatable al dataset
                CboComboACargar.ItemsSource = DsConsulta.Tables[0].DefaultView;//FJRF - Cargamos los datos encontrados
                CboComboACargar.SelectedValuePath = strSelectedValuePath;//FJRF - Cargamos la posicion
                CboComboACargar.DisplayMemberPath = strDisplayMemberPath;//FJRF - Decimos cual dato se mostrara

                CboComboACargar.Text = "";//FJRF - Ponemos el combo en la primera posicion
            }
            return BooSiHayDatos;//FJRF - Avisamos que si hay o no hay datos
        }
        #endregion

        #endregion



    }
}
